import express from 'express'
import userRoute from "./router/index.js";
const app = express()

// 监听/api, 绑定路由
app.use('/api', userRoute) // 访问则是 http:127.0.0.1/api/user


/* -------------------------------------- express学习start -------------------------------------------- */
/*
    热启动:
        1. 安装 nodemon, npm i nodemon -g node启动项目不用每次关闭再启动了
        2. 启动 nodemon 文件.js
*/

/*
    中间件
        直接声明一个函数即可 需要注意的是参数 req, res, next, next就是通关文牒
    ** 需要注意 中间件的声明需要在监听的请求声明之前才会起作用, 也就是说中间件申明是有顺序的, 因为他也是基于路由, 没发现写法都差不多么

    下面为全局生效的中间件
        局部生效则是在监听的方法中将声明的中间件进行添加即可
        app.get('/user', mw这个就是局部中间件, (req, res)...)
 */
const mw = (req, res, next) => {
    console.log('这是一个简单的中间件函数')
    // 把流转关系, 转交给下一个中间件或则路由
    next()
}
app.use(mw)

/*
    监听请求
        不使用路由也可以, 可以直接使用 get() or post() 监听请求
 */
app.get('/user', (req, res) => {
    // req.query 可以获取 get 中的请求参数, 需要注意默认情况下, query 是个空参数
    // 请求: http://127.0.0.1/user?id=3
    console.log(req.query) // { id: '3' }
    res.send({ name: 'zs', content: '测试监听 app.get() 方法'})
})

app.get('/user/:id/:name', (req, res) => {
    // 请求: http://127.0.0.1/3/4 类似 restful 风格
    console.log(req.params) // { id: '3', name: '4' }
    res.send({name: 'test', content: '请求成功!'})
})

/*
    静态资源文件
        express.static() 提供静态资源服务器, 设置之后可以直接访问目录中的所有文件
 */
app.use('/public', express.static('public')) // 第一个参数是访问前缀, 后面则是解析静态资源库

/*
    解决跨域请求的问题
        1. 运行 npm i cors -S 安装中间件
        2. 使用 const cors = require('cors') 导入中间件
        3. 在路由之前调用 app.use(cors()) 配置中间件

        与cors跨域资源相关的三个请求头
            Access-Control-Allow-Origin:
                res.setHeader('Access-Control-Allow-Origin', '*')

            Access-Control-Allow-Headers: 默认情况下, cors 仅支持客户端向服务器发送9个请求头, 如果需要发送
            额外的请求头信息, 则需要在服务端, 通过 Access-Control-Allow-Headers 对额外的请求头进行声明, 否则请求失败
                res.setHeader('Access-Control-Allow-Headers', 'Content-Type, X-Custom-Header')
 */
/*--------------------------------------- express学习end ------------------------------------------------*/

app.listen(80, () => {
    console.log('server running at http://127.0.0.1')
})
